package cn.bugstack.config;

import cn.bugstack.trigger.listener.OrderPaySuccessListener;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.eventbus.EventBus;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

// 高性能的本地内存缓存，自动过期
@Configuration
public class GuavaConfig {

    // 微信访问令牌缓存，单例，两小时过期
    @Bean(name = "weixinAccessToken")
    public Cache<String, String> weixinAccessToken() {
        return CacheBuilder.newBuilder()
                .expireAfterWrite(2, TimeUnit.HOURS)
                .build();
    }

    // 微信openid 令牌，单例，一小时过期
    @Bean(name = "openidToken")
    public Cache<String, String> openidToken() {
        return CacheBuilder.newBuilder()
                .expireAfterWrite(1, TimeUnit.HOURS)
                .build();
    }

    // 用于处理订单支付成功事件的EventBus，这是一种发布-订阅模式，实现了业务逻辑的解耦
    // 其他地方通过这个EventBus发布事件时，OrderPaySuccessListener 会接收到并处理这些事件
    @Bean
    public EventBus eventBusListener(OrderPaySuccessListener listener){
        EventBus eventBus = new EventBus();
        eventBus.register(listener);
        return eventBus;
    }
}
